package im.oen.boot.common.utils;

import im.oen.boot.common.constant.Magic;
import im.oen.boot.common.constant.OenCode;

import java.util.HashMap;
import java.util.Map;

/**
 * @author Kevin.Xu
 */
public class Maps {

    public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7) {
        return Maps.of(k1, v1, k2, v2, k3, v3, k4, v4, k5, v5, k6, v6, k7, v7);
    }

    public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6) {
        return Maps.of(k1, v1, k2, v2, k3, v3, k4, v4, k5, v5, k6, v6);
    }

    public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5) {
        return Maps.of(k1, v1, k2, v2, k3, v3, k4, v4, k5, v5);
    }

    public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4) {
        return Maps.of(k1, v1, k2, v2, k3, v3, k4, v4);
    }

    public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3) {
        return Maps.of(k1, v1, k2, v2, k3, v3);
    }

    public static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2) {
        return Maps.of(k1, v1, k2, v2);
    }

    public static <K, V> Map<K, V> of(K k1, V v1) {
        return Maps.of(k1, v1);
    }

    public static Map of(Object... objects) {
        if (Checker.isEmpty(objects)) {
            return new HashMap();
        }
        int len = objects.length;
        if (objects.length < Magic.EVEN_NUM) {
            return new HashMap();
        }

        if (len % Magic.EVEN_NUM != Magic.ZERO) {
            throw OenCode.PARAMETER_FORMAT_ERROR.exception("Length is : " + len);
        }

        HashMap map = new HashMap(objects.length);
        for (int i = 0; i < objects.length; i += 2) {
            map.put(objects[i], objects[i + 1]);
        }

        return map;
    }
}
